#include "ChatMessageModel.h"


ChatMessageModel::ChatMessageModel(QObject *parent) : QAbstractListModel{parent}{}

int ChatMessageModel::rowCount(const QModelIndex &) const
{
    return m_Messages.size();
}

QVariant ChatMessageModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid() || index.row() >= m_Messages.size())
        return QVariant();

    const ChatMessage &msg = m_Messages[index.row()];

    // 根据角色返回不同数据
    switch(role)
    {
    case ContentRole:
        return msg.content;
    case TimestampRole:
        return msg.timestamp;
    case AvatarRole:
        return msg.avatarPath;
    case IsSendRole:
        return msg.isSend;
    case MsgTypeRole:
        return msg.msgType;
    default:
        return QVariant();
    }
}

void ChatMessageModel::addMessage(const ChatMessage &message)
{
    beginInsertRows(QModelIndex(), m_Messages.size(), m_Messages.size());
    m_Messages.append(message);
    endInsertRows();
}

bool ChatMessageModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
    if (!index.isValid() || index.row() < 0 || index.row() >= m_Messages.size())
        return false;

    ChatMessage &msg = m_Messages[index.row()];

    // 针对消息内容进行修改（你也可以根据 role 做更多判断）
    if (role == ContentRole) {
        msg.content = value.toString();
    } else {
        return false;
    }

    // 发出数据改变信号，只更新ContentRole就足够了
    emit dataChanged(index, index, {role});
    return true;
}

void ChatMessageModel::updateMessageContent(int row, const QString &newContent)
{
    if (row < 0 || row >= m_Messages.size())
        return;

    // 修改消息内容
    m_Messages[row].content = newContent;

    // 获取该行的模型索引
    QModelIndex idx = index(row);

    // 通知视图该项数据已更新，ContentRole已经修改
    emit dataChanged(idx, idx, {ContentRole});
}
